﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Negocios
{
  public  class PacoteBO
    {
        private int id;
        private String nome;
        private String descricao;
        private DateTime dataInicio;
        private DateTime dataFim;
        private HotelBO hotel;       
        private DestinoBO destino;     
        private double preco;
        private String parcelamento;


        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public String Nome
        {
            get { return nome; }
            set {
                if (value == String.Empty)
                    throw new BOException("Nome do pacote deve ser informado");
                if (value.Length > 100)
                    throw new BOException("Nome deve possuir máximo de 100 caracteres");
                nome = value; 
                }
        }

        public String Descricao
        {
            get { return descricao; }
            set {
                if (value == String.Empty)
                    throw new BOException("Descrição do pacote é obrigatória.");
                descricao = value; 
                }
        }

        public DateTime DataInicio
        {
            get { return dataInicio; }
            set {
                if (value.Equals(new DateTime()))
                    throw new BOException("Informe a data inicial.");
                
                dataInicio = value; 
                }
        }

        public DateTime DataFim
        {
            get { return dataFim; }
            set {
                if (value.Equals(new DateTime()))
                    throw new BOException("Informe a data final.");
               
                if (value < DataInicio)
                    throw new BOException("A data final deve ser posterior ou igual a data inicial.");
                dataFim = value; 
                }
        }

        public HotelBO Hotel
        {
            get { return hotel; }
            set {
                if (value == null)
                    throw new BOException("O hotel deve ser informado.");
                
                 if ((new HotelBOMetodos()).Consultar(value.Id) == null)
                 throw new BOException("Hotel informado não existe.");
                hotel = value; 
                }
        }

        public DestinoBO Destino
        {
            get { return destino; }
            set {
                if (value == null)
                    throw new BOException("O destino deve ser informado.");
                // new DestinoBO
               //  if((new DestinoBOMetodos()).Consultar(value.Id) == null)
              //   throw new BOException("Destino não existe.");
                destino = value; 
                }
        }
        
        public double Preco
        {
            get { return preco; }
            set {
                if (value.Equals(new Double()))
                    throw new BOException("O preço deve ser informado.");
                if (value <= 0)
                    throw new BOException("O preço deve ser maior que zero.");
                preco = value; 
                }
        }

        public String Parcelamento
        {
            get { return parcelamento; }
            set {
                if (value.Length > 256)
                    throw new BOException("A descrição do parcelamento deve ter no máximo 256 caracteres");
                parcelamento = value; 
                }
        }
        public override string ToString()
        {
            return Nome;
        }
    }
}
